'''
    编写代码,通过异常捕获语句实现用户上传头像格式检测功能
'''
# 第1-2行：导入模块
import os  # 引入操作系统模块，用于处理文件路径
# 第4-10行：定义自定义异常类

class AvatarFormatError(Exception):
    """自定义头像格式异常类"""

    def __init__(self, file_name, allowed_formats):
        # 初始化异常：存储文件名和允许的格式列表
        self.file_name = file_name
        self.allowed_formats = allowed_formats

    def __str__(self):
        # 定义异常的消息格式
        return f"错误：文件 '{self.file_name}' 格式不支持！允许的格式: {', '.join(self.allowed_formats)}"


# 第12行：定义允许的头像格式
ALLOWED_AVATAR_FORMATS = ['.jpg', '.jpeg', '.png', '.gif', '.webp']  # 创建支持的图片格式列表


# 第14-45行：主函数定义
def upload_avatar():
    """模拟用户上传头像并检测格式"""
    try:  # 开始尝试执行可能出错的代码
        # 第17行：获取用户输入
        # 假设用户输入 "my_avatar.png"
        file_path = input("请上传您的头像文件: ")  # → 返回字符串 "my_avatar.png"

        # 第20-22行：处理文件路径
        file_name = os.path.basename(file_path)  # → 提取文件名 "my_avatar.png"
        _, file_extension = os.path.splitext(file_name)  # → 分割为 ("my_avatar", ".png")
        file_extension = file_extension.lower()  # → 统一转换为小写 ".png"

        # 第25行：检查文件格式
        # 检查 ".png" 是否在 ['.jpg', '.jpeg', '.png', '.gif', '.webp'] 中
        if file_extension not in ALLOWED_AVATAR_FORMATS:  # → 条件为False，跳过if块
            # 此部分代码不会执行
            raise AvatarFormatError(file_name, ALLOWED_AVATAR_FORMATS)

        # 第29-31行：上传成功处理
        print(f"头像 '{file_name}' 上传成功！")  # → 输出: 头像 'my_avatar.png' 上传成功！
        print("正在生成缩略图...")  # → 输出: 正在生成缩略图...
        print("保存到用户资料中...")  # → 输出: 保存到用户资料中...

    # 以下异常处理块不会执行，因为未触发异常
    except AvatarFormatError as e:  # 条件不满足，跳过
        print(e)
        print("请重新选择支持的图片格式上传！")

    except Exception as e:  # 没有其他异常发生，跳过
        print(f"上传失败：{str(e)}")

    finally:  # 无论是否发生异常都会执行
        print("上传处理完成！")  # → 输出: 上传处理完成!


# 第48-51行：程序入口
if __name__ == "__main__":
    print("=== 头像上传系统 ===")  # → 首先输出标题
    print(f"支持的格式: {', '.join(ALLOWED_AVATAR_FORMATS)}")  # → 输出支持的格式列表
    upload_avatar()  # 调用上传函数

'''
=== 头像上传系统 ===
支持的格式: .jpg, .jpeg, .png, .gif, .webp
请上传您的头像文件: my_avatar.png
头像 'my_avatar.png' 上传成功！
正在生成缩略图...
保存到用户资料中...
上传处理完成！
'''